/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function (root) {
  var max = 0
  dfs(root, 1)
  return max
};

function dfs(root, dep) {
  if (!root) return 0;
  if (!root.left && !root.right) {
    max = Math.max(max, dep)
    return
  }
  if (root.left) {
    dfs(root.left, dep + 1)
  }
  if (root.right) {
    dfs(root.right, dep + 1)
  }
}

/**
 * 最小深度
 * @param {*} root 
 * @returns 
 */
var minDepth = function (root) {
  if (!root) return 0;
  // 到叶子节点 返回 1
  if (!root.left && !root.right) return 1;
  // 只有右节点时 递归右节点
  if (!root.left) return 1 + minDepth(root.right);
  // 只有左节点时 递归左节点
  if (!root.right) return 1 + minDepth(root.left);
  return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
};